﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Model.Contratos;
using Model.Tipologias;

namespace welwitschia.Contratos
{
    public partial class ContratoRefeicaoOpcaoDetalhe : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {

                IContratoService contratoService = new ContratoService();
                if (!String.IsNullOrEmpty(Request.QueryString["rcid"]))
                {
                    if (String.IsNullOrEmpty(Request.QueryString["opc"]))
                    {
                        RefeicaoContrato refeicaoContrato =
                            contratoService.ObterRefeicaoPorIdRefeicaoContratada(Convert.ToInt64(Request.QueryString["rcid"]));
                        ModelParaView(refeicaoContrato);
                    }
                    else
                    {
                        OpcaoRefeicaoContrato opcaoRefeicaoContrato =
                            contratoService.ObterOpcaoPorIdRefeicaoContratadaCodOpcao(
                                Convert.ToInt64(Request.QueryString["rcid"]), Request.QueryString["opc"].ToString());
                        ModelParaView(opcaoRefeicaoContrato);
                    }
                }
                else
                {
                    throw new Exception("Parâmetro inválido!");
                }
            }
            
        }

        protected void btnGravar_Click(object sender, EventArgs e)
        {
            IContratoService contratoService = new ContratoService();
            OpcaoRefeicaoContrato opcaoRefeicaoContrato = new OpcaoRefeicaoContrato();
            
            opcaoRefeicaoContrato = ViewParaModel(opcaoRefeicaoContrato);
            
            if (String.IsNullOrEmpty(hfCodCodOpcao.Value))
            {
                contratoService.Insere(opcaoRefeicaoContrato);
            }
            else
            {
                contratoService.Actualiza(opcaoRefeicaoContrato);
            }

            hfCodCodOpcao.Value = opcaoRefeicaoContrato.TipoOpcao.Codigo;

            Response.Redirect(@"~\Contratos\ContratoRefeicaoDetalhe.aspx?rcid=" + hfIdRefeicaoContratada.Value);

        }

        protected void btnVoltar_Click(object sender, EventArgs e)
        {
            Response.Redirect(@"~\Contratos\ContratoRefeicaoDetalhe.aspx?rcid=" + hfIdRefeicaoContratada.Value);
        }

        private void ModelParaView(RefeicaoContrato refeicaoContrato)
        {
            txtClasseRefeicao.Text = refeicaoContrato.TipoClasseRefeicao.Descricao;
            txtDataContrato.Text = refeicaoContrato.Contrato.DataContrato.ToString();
            txtDesignacao.Text = refeicaoContrato.Contrato.Unidade.Designacao;
            txtIdCliente.Text = refeicaoContrato.Contrato.Cliente.IdCliente.ToString();
            txtIdUnidade.Text = refeicaoContrato.Contrato.Unidade.IdUnidade.ToString();
            txtNomeCliente.Text = refeicaoContrato.Contrato.Cliente.Nome;
            txtNumeroContrato.Text = refeicaoContrato.Contrato.NumeroContrato.ToString();
            txtTipoRefeicao.Text = refeicaoContrato.TipoRefeicao.Descricao;
            hfIdRefeicaoContratada.Value = refeicaoContrato.IdRefeicaoContratada.ToString();
            hfCodCodOpcao.Value = String.Empty;
            ITipologiaService tipologiaService = new TipologiaService();
            ddlOpcao.DataSource = tipologiaService.ObterPorTipo("TipoOpcao");
            ddlOpcao.DataTextField = "Descricao";
            ddlOpcao.DataValueField = "Codigo";
            ddlOpcao.DataBind();
            ddlOpcao.Items.Insert(0, new ListItem() { Text = String.Empty, Value = "-1000" });
        }

        private void ModelParaView(OpcaoRefeicaoContrato opcaoRefeicaoContrato)
        {
            ModelParaView(opcaoRefeicaoContrato.RefeicaoContratada);
            ddlOpcao.SelectedValue = opcaoRefeicaoContrato.TipoOpcao.Codigo;
            txtDescricaoOpcao.Text = opcaoRefeicaoContrato.Descricao;
            hfCodCodOpcao.Value = opcaoRefeicaoContrato.TipoOpcao.Codigo;
        }

        private OpcaoRefeicaoContrato ViewParaModel(OpcaoRefeicaoContrato opcaoRefeicaoContrato)
        {
            opcaoRefeicaoContrato.Descricao = txtDescricaoOpcao.Text;
            opcaoRefeicaoContrato.TipoOpcao = new Tipologia() { Codigo = ddlOpcao.SelectedValue };
            opcaoRefeicaoContrato.RefeicaoContratada =
                new RefeicaoContrato() { IdRefeicaoContratada = Convert.ToInt64(hfIdRefeicaoContratada.Value) };

            return opcaoRefeicaoContrato;
        }
    }
}